package main

// 35. 搜索插入位置
func main() {
	nums := []int{1}
	target := 5
	insert := searchInsert(nums, target)
	println(insert)
}

func searchInsert(nums []int, target int) int {
	numsLen := len(nums)
	left, right := 0, numsLen-1

	// 找到第一个大于等于它的
	ans := len(nums)

	for left <= right {
		mid := ((right - left) / 2) + left
		midNum := nums[mid]

		if midNum >= target {
			ans = mid
			right = mid - 1
		} else {
			left = mid + 1
		}
	}

	return ans
}

func searchInsert1(nums []int, target int) int {
	numsLen := len(nums)
	left, right := 0, numsLen-1

	for left < right {

		mid := ((right - left) / 2) + left
		midNum := nums[mid]

		if midNum >= target {
			right = mid
		} else {
			left = mid + 1
		}
	}

	if nums[right] < target {
		return right + 1
	}

	return left
}

/**
给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4


提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为 无重复元素 的 升序 排列数组
-104 <= target <= 104
*/
